package delegate;

import java.net.MalformedURLException;
import java.rmi.RemoteException;
import java.util.Vector;

import observer.Observable;
import observer.Observer;

import NegocioVO.*;
import InterfazRemota.*;




public class RestauranteDelegate extends Observable {

	
	private static final long serialVersionUID = 1L;
	private static RestauranteDelegate rd=new RestauranteDelegate();
	private static RMI rmi;
	private static EmpleadoVO loggedUser=new EmpleadoVO();
	
	
	static {
		try {
			rmi=new RMI();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private RestauranteDelegate()
	{
		super();
	}
	
	public static void registerObserver(Observer o)
	{
		rd.add(o);
	}
	
	public static void removeObserver(Observer o)
	{
		rd.remove(o);
	}
	
	public static void login(final EmpleadoVO toLogin)
	{
		Thread t=new Thread() {
			public void run()
			{
				
				try {
					
					//rmi.login(toLogin);
					EmpleadoVO u=rmi.login(toLogin);
					
					if(u!=null && u.isLogged()) 
					{
						RestauranteDelegate.rd.notifyAllObservers("login", "Login exitoso");
						RestauranteDelegate.loggedUser=u;
					}
					else RestauranteDelegate.rd.notifyAllObservers("login", "Usuario o clave incorrectos");
				
				} catch (RestoranException e) {
					RestauranteDelegate.rd.notifyAllObservers("login", "Se ha producido un error en el login");
					e.printStackTrace();
				}
				catch(RemoteException ex)
				{
					RestauranteDelegate.rd.notifyAllObservers("login", "Se ha producido un error de comunicacion en el login");
					ex.printStackTrace();
				}
				
			}
		};
		t.start();
	}
	
	public static EmpleadoVO getLoggedUser()
	{
		return RestauranteDelegate.loggedUser;
		
	}
	
	public static void altaProductosDeposito(final String nombreDeposito,final String nombreProveedor, final Vector<ItemRequerimientoVO> productos) throws RestoranException,RemoteException {
		
		Thread t=new Thread() {
			public void run()
			{
				try {
					
					ProveedorVO p=new ProveedorVO();
					p.setNombre(nombreProveedor);
					
					rmi.altaProductosDeposito(loggedUser,p, productos);
					RestauranteDelegate.rd.notifyAllObservers("altaProductoDeposito", "");
					System.out.println("No captura la excepcion");
				} catch (Exception e) {
					
					System.out.println("Llega por restoran");
					RestauranteDelegate.rd.notifyAllObservers("altaProductoDeposito", e.getMessage());
					e.printStackTrace();
				}
				
			}
		};
		t.start();
	}
	
}
